/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.vistas;

import java.awt.event.KeyEvent;
import javax.swing.JTextField;

/**
 *
 * @author wilo
 */
public class Validacion
{
  public void numeros(KeyEvent evt, JTextField txtCampo)
  {
    String cadena = txtCampo.getText();
    txtCampo.setText("");

    if ((evt.getKeyCode() == 10) || (evt.getKeyCode() == 8)) {
      txtCampo.setText(cadena.substring(0, cadena.length()));
    }
    else if (cadena.length() > 0) {
      char keyChar = evt.getKeyChar();
      String aux = keyChar + "";
      if ((aux.charAt(0) > '/') && (aux.charAt(0) < ':'))
        txtCampo.setText(cadena.substring(0, cadena.length()));
      else
        txtCampo.setText(cadena.substring(0, cadena.length() - 1));
    }
  }

  public void decimal(KeyEvent evt, JTextField txtCampo)
  {
    String cadena = txtCampo.getText();
    txtCampo.setText("");

    if ((evt.getKeyCode() == 10) || (evt.getKeyCode() == 8)) {
      txtCampo.setText(cadena.substring(0, cadena.length()));
    }
    else if (cadena.length() > 0) {
      char keyChar = evt.getKeyChar();
      String aux = keyChar + "";
      if (((aux.charAt(0) > '/') && (aux.charAt(0) < ':')) || (aux.charAt(0) == '.'))
        txtCampo.setText(cadena.substring(0, cadena.length()));
      else
        txtCampo.setText(cadena.substring(0, cadena.length() - 1));
    }
  }

  public boolean validadarCed_RUC(String RUC)
  {
    if (RUC.equals("9999999999"))
      return true;
    if ((RUC.length() == 10) || (RUC.length() == 13)) {
      System.out.println("Va a 1......................");
      boolean validadorDeCedula = validadorDeCedula(RUC);
      if (!validadorDeCedula)
      {
        System.out.println("Va a 2......................");
        validadorDeCedula = validadorDePerJuridica(RUC);
        if (!validadorDeCedula)
        {
          System.out.println("Va a 3......................");
          validadorDeCedula = validadorDeEmpresa(RUC);
          return validadorDeCedula;
        }
        return validadorDeCedula;
      }
      return validadorDeCedula;
    }
    return false;
  }

  public boolean validadorDeEmpresa(String ruc)
  {
    int prov = Integer.parseInt(ruc.substring(0, 2));
    boolean val = false;

    if ((prov <= 0) || (prov > 24)) {
      return val;
    }

    int[] d = new int[ruc.length()];

    for (int i = 0; i < d.length; i++) {
      d[i] = Integer.parseInt(ruc.charAt(i) + "");
    }

    Integer v1 = Integer.valueOf(d[0] * 3);
    Integer v2 = Integer.valueOf(d[1] * 2);
    Integer v3 = Integer.valueOf(d[2] * 7);
    Integer v4 = Integer.valueOf(d[3] * 6);
    Integer v5 = Integer.valueOf(d[4] * 5);
    Integer v6 = Integer.valueOf(d[5] * 4);
    Integer v7 = Integer.valueOf(d[6] * 3);
    Integer v8 = Integer.valueOf(d[7] * 2);
    Integer v9 = Integer.valueOf(d[8]);

    Integer sumatoria = Integer.valueOf(v1.intValue() + v2.intValue() + v3.intValue() + v4.intValue() + v5.intValue() + v6.intValue() + v7.intValue() + v8.intValue());
    Integer modulo = Integer.valueOf(sumatoria.intValue() % 11);
    Integer sustraendo = Integer.valueOf(modulo.intValue() * 11);
    if ((modulo.intValue() == 0) && (d[8] == 0)) {
      return true;
    }
    Integer digito = Integer.valueOf(11 - modulo.intValue());

    System.out.println("Digito RUC       –> " + digito);
    System.out.println("Digito Calculado –> " + v9);

    if (digito == v9)
      val = true;
    else {
      val = false;
    }
    return val;
  }

  public boolean validadorDePerJuridica(String ruc)
  {
    int prov = Integer.parseInt(ruc.substring(0, 2));
    int[] coeficientes = { 4, 3, 2, 7, 6, 5, 4, 3, 2 };
    int constante = 11;

    if ((prov <= 0) || (prov > 24)) {
      System.out.println("Error: ruc ingresada mal");
      return false;
    }

    int[] d = new int[10];
    int suma = 0;

    for (int i = 0; i < d.length; i++) {
      d[i] = Integer.parseInt(ruc.charAt(i) + "");
    }

    for (int i = 0; i < d.length - 1; i++)
    {
      d[i] *= coeficientes[i];
      suma += d[i];
    }

    System.out.println("Suma es: " + suma);

    int aux = suma % constante;

    if ((aux == 0) && (d[9] == 0)) {
      return true;
    }
    int resp = constante - aux;

    resp = resp == 10 ? 0 : resp;

    System.out.println("Aux: " + aux);
    System.out.println("Resp " + resp);
    System.out.println("d[9] " + d[9]);

    if (resp == d[9]) {
      return true;
    }
    return false;
  }

  public boolean validadorDeCedula(String RUC) {
    boolean cedulaCorrecta = false;
    try
    {
      String cedula;
  
      if (RUC.length() == 10)
        cedula = RUC;
      else {
        cedula = RUC.substring(0, 10);
      }

      int tercerDigito = Integer.parseInt(cedula.substring(2, 3));
      if (tercerDigito < 6) {
        int[] coefValCedula = { 2, 1, 2, 1, 2, 1, 2, 1, 2 };
        int verificador = Integer.parseInt(cedula.substring(9, 10));
        int suma = 0;
        int digito = 0;
        for (int i = 0; i < cedula.length() - 1; i++) {
          digito = Integer.parseInt(cedula.substring(i, i + 1)) * coefValCedula[i];
          suma += digito % 10 + digito / 10;
        }
        if ((suma % 10 == 0) && (suma % 10 == verificador))
          cedulaCorrecta = true;
        else if (10 - suma % 10 == verificador)
          cedulaCorrecta = true;
        else
          cedulaCorrecta = false;
      }
      else {
        cedulaCorrecta = false;
      }
    } catch (NumberFormatException e) {
      cedulaCorrecta = false;
    } catch (Exception e) {
      cedulaCorrecta = false;
    }
    return cedulaCorrecta;
  }
}
